/**
 * @file base66.h
 * @brief encoder decoder with base64
 * */
#ifndef __SECURITY_BASE64_H__
#define __SECURITY_BASE64_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
namespace Security
{
class CBase64
{

public:

	CBase64();

	virtual ~CBase64();

public:
	/*********************************************************************
	 Description:
	 获取字符串pInput经过Base64编码后的长度，注意这个长度是包括字符
	 串结束标志的,当返回值小于0表示失败
	 author:
	 xzyang
	 ********************************************************************/
	int GetBase64EncoderLen(char *pInput, int nInputSize);
	/*********************************************************************
	 Description:
	 BASE64编码，注意输出的缓冲区的长度要足够长(会存放一个字符串结
	 束标志)，缓冲区的长度可通过GetBase64EncoderLen函数获取
	 author:
	 xzyang
	 ********************************************************************/
	bool Base64Encoder(char *pInput, int InputLen, char *pOutput);

	/*********************************************************************
	 Description:
	 获取字符串pInput经过Base64解码后的长度，注意这个长度是包括字符
	 串结束标志的,当返回值小于0表示失败，注意pInput必须是
	 author:
	 xzyang
	 ********************************************************************/
	int GetBase64DecoderLen(char *pInput);
	/*********************************************************************
	 Description:
	 BASE64解码后的长度，注意这个长度是包括字符串结束标志的
	 author:
	 xzyang
	 ********************************************************************/
	bool Base64Decoder(char *pInput, char *pOutput);

	// --------------------------------------------------------------------
	// 获取在Base64字符表中的索引
	// --------------------------------------------------------------------
	unsigned char Base64CoderToIndex(char base64);

};
}
#endif
